//给定一个字符串 s ，通过将字符串 s 中的每个字母转变大小写，我们可以获得一个新的字符串。
//
// 返回 所有可能得到的字符串集合 。以 任意顺序 返回输出。
//
//
//
// 示例 1：
//
//
//输入：s = "a1b2"
//输出：["a1b2", "a1B2", "A1b2", "A1B2"]
//
//
// 示例 2:
//
//
//输入: s = "3z4"
//输出: ["3z4","3Z4"]
//
//
//
//
// 提示:
//
//
// 1 <= s.length <= 12
// s 由小写英文字母、大写英文字母和数字组成
//
//
// Related Topics 位运算 字符串 回溯与递归 👍 533 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
function letterCasePermutation(s: string): string[] {
//? 此解法只有递归 就一直走下去 分不同情况而已
    let res = [];
    let dfs = (t, str) => {
        if (t.length === s.length) return res.push(t);
        let ch = str[0];
        let nextStr = str.substr(1);
        //? 当前位置为数字，只有一个分支
        if (!isNaN(Number(ch))) {
            dfs(t + ch, nextStr);
        } else {
            //? 当前位置为字母，会产生两个分支
            let tmp = ch.toUpperCase();
            if (tmp === ch) tmp = ch.toLowerCase();
            dfs(t + ch, nextStr);
            dfs(t + tmp, nextStr);
        }
    };
    dfs("", s);
    return res;

};
//leetcode submit region end(Prohibit modification and deletion)
